
        <html>
			<head>
			     <title>那些年我们一起脱过的衣裳－脱壳(上) - 夸父追日</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/binary/8640">http://drops.wooyun.org/binary/8640</a></h1>
				
      <p>
        <h1>0x01 简介</h1>

<hr />

<p><a href="http://drops.wooyun.org/tips/8296">http://drops.wooyun.org/tips/8296</a>文中提到了脱壳七大法,然而实际上我有八大法!而网上的那些教程都是你复制我的,我复制你的,千篇一律。朋友看了之后,依然不懂~</p>

<p>那篇文章中有UPX脱壳笔记,tElock脱壳笔记,PEncrypt脱壳笔记.但是我认为应该详细介绍八大法脱壳。因为他提到的所有这种脱壳笔记,都是利用八大法脱的!每一种壳都可以用很多种方法来脱掉,所以应该介绍的应该是脱壳大法,而不是xxx壳应该用xxx方法来脱,授人以鱼不如授人以渔。SO,有了这篇教程~</p>

<p>我可以保证:八种脱壳大法学会之后,你将能脱掉市面上70%以上的壳。其实脱壳并不需要捧着本汇编的书去学一遍汇编才能脱壳。</p>

<!--more-->

<h2>1.1什么是壳?</h2>

<p>大家应该先明白“壳”的概念。在自然界中，我想大家对"壳"这东西应该都不会陌生了，植物用它来保护种子，动物用它来保护身体等等。同样，在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行，拿到控制权，然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然（当然后来也出现了所谓的“壳中带籽”的壳）。由于这段程序和自然界的壳在功能上有很多相同的地方，基于命名的规则，大家就把这样的程序称为“壳”了。就像计算机病毒和自然界的病毒一样，其实都是命名上的方法罢了。</p>

<h2>1.2为什么要脱壳?</h2>

<p>脱壳用处很大，可以破除壳程序对程序的保护。从而使我们更接近程序代码，了解这个程序。或者像我这种改版权小王子来说,只有脱了壳才能改版权!而对于免杀制作者来说, 帮助木马病毒进行免杀，我们可以直接加壳免杀，也可以脱壳对其代码进行修改从而躲过杀毒软件的查杀。</p>

<h2>1.3脱壳的八大法</h2>

<ul>
<li>单步跟踪法</li>
<li>ESP定律法 </li>
<li>两次断点法 </li>
<li>一步到达OEP </li>
<li>最后一次异常法 </li>
<li>模拟跟踪法</li>
<li>“SFX”法</li>
<li>出口标志法</li>
</ul>

<h1>0x02 脱壳前的准备</h1>

<hr />

<p>首先,我们还得回顾上位大神写的</p>

<h2>2.1 OEP</h2>

<p>OEP：(Original Entry Point)，程序的入口点。软件加壳一般隐藏了程序真实的OEP（或者用了假的OEP）， 我们需要寻找程序真正的OEP，才可以完成脱壳。</p>

<p>一般加壳程序在使用Ollydbg等动态调试工具时，会停在壳的预处理块。即处在对于程序原始代码块的解压或解密操作之前，在运行完程序自脱壳模块后，会停留在程序加壳之前的OEP位置，此时是dump程序的最佳时期。脱壳时在真实OEP处下int3断点，就可以捕捉到程序代码段完全恢复的状态。因此，寻找加壳程序的正确OEP，也成了手动脱壳时的第一要务。</p>

<h3>2.1.1说了这么多,到了就算我脱壳的时候到了OEP我也不知道啊?</h3>

<p>OEP：Original Entry Point(程序入口点) ，程序加壳前真正的入口点。 那么,我给大家准备了OEP特征大全!</p>

<h3>2.1.2 Delphi</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709430120591.png" alt="" /></p>

<h3>2.1.3 BC++</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709430211624.png" alt="" /></p>

<h3>2.1.4 VB</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709430213793.png" alt="" /></p>

<h3>2.1.5 汇编</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709430398392.png" alt="" /></p>

<h3>2.1.6 VC++6.0</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709430680866.png" alt="" /></p>

<h3>2.1.7 VC++7.0</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709431271100.png" alt="" /></p>

<h3>2.1.8 易语言非独立编译</h3>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709431322245.png" alt="" /></p>

<h3>2.1.9 易语言独立编译</h3>

<p><img src="http://static.wooyun.org//drops/20151009/2015100902052552618bianyi.png" alt="" /></p>

<h2>2.2 IAT</h2>

<p>IAT：(Import Address Table)，导入地址表。由于导入函数就是被程序调用但其执行代码又不在程序中的函数，这些函数的代码位于一个或者多个DLL中。当PE文件被装入内存的时候，Windows装载器才将DLL 装入，并将调用导入函数的指令和函数实际所处的地址联系起来（动态连接），这操作就需要导入表完成。其中导入地址表就指示函数实际地址。 多数加壳软件在运行时会重建导入地址表，因此获取加壳程序正确的导入地址表也是手动脱壳操作中的一个关键问题。</p>

<h1>0x03 我能在万花从中脱去壳的衣裳!</h1>

<hr />

<p>下面是我对八大法脱壳的实例的详细讲解。</p>

<h2>3.1脱壳的基本步骤</h2>

<p>查壳(PEID、FI、PE-SCAN)-->寻找OEP(OD)-->脱壳/Dump(LordPE、PeDumper、OD自带的脱壳插件、PETools)-->修复(Import REConstructor)</p>

<h2>3.2单步跟踪法</h2>

<h3>中国菜刀为例</h3>

<p>查壳 很经典的UPX壳</p>

<p><img src="http://static.wooyun.org//drops/20150918/2015091805065854189.png" alt="" /></p>

<p>我们一般要制作过狗菜刀的必经之路,那只有脱壳才能修改里面的东西!</p>

<ol>
<li><p>一般在有壳的时候,用OD载入,会弹出以下提示框</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709431844351.png" alt="" /></p>

<p>那么我们在这里选择否就是了!</p></li>
<li><p>首先要记住几个快捷键:F8单步步过,F7单步步入,F4运行到选定位置</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709431932388.png" alt="" /></p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432033230.png" alt="" /></p>

<p>载入程序之后使用F8单步向下跟踪,实现向下的跳。当遇到有一条红色的向上的跳转的时候(红色为跳转已实现,白色为跳转未实现。),如果再继续按F8会一直在这里循环。那么我们可以在它的下面那一行按下F4(运行到选定位置)这样就不会一直循环了,因为我这里有连续两个向上的跳转,所以应该跳过这两个循环,所以我们用鼠标选中下一行</p>

<pre><code>004B055C    8B02            mov eax,dword ptr ds:[edx]
</code></pre>

<p>这一行按下F4来进行继续的向下操作。</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432187906.png" alt="" /></p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432151135.png" alt="" /></p>

<p>其实很简单,就这样上面这个方法一直按F8,遇到向上的跳转就按F4,到达OEP之后就能进行脱壳了。</p>

<p>这就是中国菜刀的OEP,跟上面的OEP大全对比一下。VC++6.0的程序!</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432222395.png" alt="" /></p></li>
<li><p>(图中为马上就要到达OEP了),遇到在popad指令下的远转移指令时，要格外注意，因为这个远转移指令的目的地很可能就是OEP。 或者有很大的跳转（大跨段），可以看到jmp的那一行</p>

<pre><code>004B0634  - E9 073EFBFF     jmp caidao.00464440
</code></pre>

<p>当前地址004B0634跳转到 00464440,那么这就是一个大跳转,跳转的目的地很大的可能就是OEP</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432273281.png" alt="" /></p></li>
<li><p>如果(我说的是如果)刚载入程序，在附近就有一个CALL的，我们就F7跟进去，不然程序很容易使程序运行起来(跑飞)，运行起来了话,我们就不能继续执行下面的操作了。新例子:</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432316195.png" alt="" /></p></li>
<li><p>如果(我说的是如果)在跟踪的时候，如果运行到某个CALL程序就让程序运行起来了，就在这个CALL中F7进入,然后继续F8,遇到向上的跳转就按F4。</p></li>
<li><p>到达OEP就完了吗?</p>

<p>还没开始脱壳呢~~<a href="http://drops.wooyun.org/tips/8296">http://drops.wooyun.org/tips/8296</a>文中介绍了用 LordPE脱壳,当然用LordPE脱壳是极好的,那么我就先用OD自带的脱壳调试进程来就行脱壳吧,以后再讲LordPE脱壳。</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432462360.png" alt="" /></p>

<p>在这里需要注意的是重建输入表和不重建输入表,其他的都为默认。</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432534987.png" alt="" /></p>

<p>首先选择重建输入表点击脱壳,命名为1.exe</p>

<p>然后选择不重建输入表点击脱壳,命名为2.exe</p>

<p>因为我们不知道需不需要重建输入表,所以就进行两次脱壳。</p>

<p>1.exe运行正常, 2.exe运行错误</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432540417.png" alt="" /></p>

<p>再看一下1.exe有没有壳,ok,没有壳了!</p>

<p><img src="http://static.wooyun.org//drops/20150917/2015091709432634166.png" alt="" /></p></li>
</ol>

<p>注:如有不懂欢迎私信!</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          